package servlet;

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import javax.imageio.stream.FileImageInputStream;
import java.io.*;

@WebServlet(urlPatterns = "/imageShow")
public class MdImageShow extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求参数，imageFileName 是图像文件的文件名
        String imageFileName = request.getParameter("imageFileName");
        // 设置响应类型为图像格式（JPEG），这将告诉浏览器返回的是图像而非文本
        response.setContentType("image/jpeg");
        // 获取响应的输出流，用于向客户端发送图像数据
        OutputStream os = response.getOutputStream();
        // 获取当前 Web 应用程序的真实路径，并与上传文件夹路径拼接，得到图像存储的完整路径
        String savePath = request.getServletContext().getRealPath("/uploadFile");
        // 使用 try-with-resources 语法确保文件输入流和字节输出流自动关闭
        try (FileImageInputStream input = new FileImageInputStream(new File(savePath + File.separator + imageFileName));
             // 用于暂时存储读取到的数据，最终将其转换为字节数组
             ByteArrayOutputStream output = new ByteArrayOutputStream();) {
            // 创建一个 1024 字节的缓冲区
            byte[] buf = new byte[1024];
            int len = -1;
            // 循环读取图像文件的数据，直到文件读取完毕
            while ((len = input.read(buf)) != -1) {
                // 将读取到的字节数据写入 ByteArrayOutputStream 中
                output.write(buf, 0, len);
            }
            // 获取存储在 ByteArrayOutputStream 中的所有字节数据
            byte[] data = output.toByteArray();
            // 将字节数据写入到响应的输出流中，发送图像数据给客户端
            os.write(data);
            // 确保所有数据都被发送到客户端
            os.flush();
        } catch (FileNotFoundException ex) {
            // 如果文件未找到，打印堆栈信息，可以在这里进行日志记录或者返回客户端更友好的错误信息
            ex.printStackTrace();
        } catch (IOException ex) {
            // 捕获其他可能的 I/O 异常
            ex.printStackTrace();
        }
    }

//    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        String imageFileName = request.getParameter("imageFileName");
//        response.setContentType("text/html; charset=UTF-8");
//        response.setContentType("image/jpeg");
//        OutputStream os = response.getOutputStream();
//        String savePath = request.getServletContext().getRealPath("/uploadFile");  //存储路径
//
//        try (FileImageInputStream input = new FileImageInputStream(new File(savePath + File.separator +imageFileName));
//             ByteArrayOutputStream output = new ByteArrayOutputStream();) {
//            byte[] buf = new byte[1024];
//            int len = -1;
//            while ((len = input.read(buf)) != -1) {
//                output.write(buf, 0, len);
//            }
//            byte[] data = output.toByteArray();
//            os.write(data);
//            os.flush();
//        } catch (FileNotFoundException ex) {
//            ex.printStackTrace();
//        }
//    }
}

